#include <stdio.h>
#include "static.h"
#include "hello.h"
#include "dynamic.h"

/*
GCC实现了如下的函数宏
__func__   C99的标准，但是GCC只输出函数名称。
__FUNCTION__  同__func__，
__PRETTY_FUNCTION__  非标准宏。这个宏比__FUNCTION__功能更强,  
若用g++编译C++程序, __FUNCTION__只能输出类的成员名,不会输出类名; 
而__PRETTY_FUNCTION__则会以 <return-type>  <class-name>::<member-function-name>(<parameters-list>) 的格式输出成员函数的详悉信息
(注: 只会输出parameters-list的形参类型, 而不会输出形参名).
若用gcc编译C程序,__PRETTY_FUNCTION__跟__FUNCTION__的功能相同.
*/
//#define PRINT(str)  printf("[%s:%s:%d] %s\n", __FILE__, __PRETTY_FUNCTION__, __LINE__, str)

#define PRINT(str)  printf("[%s:%s %s:%s:%d] %s\n", __DATE__, __TIME__, __FILE__, __FUNCTION__, __LINE__, str)

int main(int argc, char* argv[])
{
#if defined(DEBUG)
     PRINT("Debug mode");
#else
     PRINT("Release mode");
#endif

     PRINT("start");
     Hello();
     Dynamic();
     DynamicCallStatic();
     PRINT("next function");
     Static();
     PRINT("end");
     return 0;
}
